반사에서 계획으로
에이전트 설계의 진화 과정에서 우리는 반사 에이전트(Reflex Agents)에서 시작해, 단순한 규칙에 따라 지각을 행동으로 직접 매핑하는 방식(예: "앞차가 제동하면 브레이크 작동")에서 출발하여 문제 해결 에이전트(Problem-Solving Agents)로 이동합니다. 반사 에이전트는 즉각적인 상황에 기반하여 작동하는 반면, 문제 해결 에이전트는 목표 기반(Goal-based)입니다. 이들은 행동의 미래 결과를 고려하여 특정 목표를 충족하는 행동 순서를 찾아냅니다.
- 반사 에이전트: $Action = Function(Percept)$
- 계획 에이전트: $Action\_Sequence = Search(State, Goal)$
원자적 상태 표현
이 기본 수준에서 에이전트는 원자적 표현(Atomic Representation)을 사용합니다. 즉, 세계의 상태가 블랙박스로 취급되어, 검색 알고리즘에 내부 구조가 보이지 않는 단일 노드로 간주됩니다. 에이전트는 다음에 대해서만 추론합니다:
- 상태 ($S$): 환경의 스냅샷.
- 행동 ($A$): 상태 간 전이.
- 목표 테스트: 상태 $s \in S_{goal}$인지 확인하는 불리언 검사.
문제 해결 루프
문제 해결 에이전트는 환경을 탐색하기 위해 뚜렷한 4단계 주기를 따릅니다:
- 목표 수립: 현재 상황에 기반하여 추구할 목표를 결정.
- 문제 수립: 실제 세계를 수학적 모델(상태와 행동)로 추상화.
- 탐색: 행동 순서를 시뮬레이션하여 최적 경로를 찾습니다.
- 실행: 탐색 단계에서 찾은 행동을 추가 고려 없이 수행 (정적 환경을 가정).
파이썬 구현 (agent_types.py)
1
class ReflexAgent:
2
defact(self, percept):
3
# Direct mapping: Rule -> Action
4
return rules.get(percept, default_action)
5
6
class ProblemSolvingAgent:
7
def__init__(self):
8
self.seq = [] # Buffered action sequence
9
10
defact(self, percept):
11
# If we are mid-execution, continue
12
ifself.seq:
13
returnself.seq.pop(0)
14
15
# Otherwise, Plan (Search)
16
state = self.update_state(percept)
17
goal = self.formulate_goal(state)
18
problem = self.formulate_problem(state, goal)
19
20
# Search returns a list of actions
21
self.seq = search_algorithm(problem)
22
23
returnself.seq.pop(0)